home *** CD-ROM | disk | FTP | other *** search
/ Action Games (2008) / akcnihry1.iso / Code RED / codered.exe / Data1.cab / g_local.h1 < prev    next >
Encoding:
Text File  |  2002-12-07  |  30.6 KB  |  1,138 lines

  1. /*
  2. Copyright (C) 1997-2001 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20. // g_local.h -- local definitions for game module
  21.  
  22. #include "q_shared.h"
  23.  
  24. // define GAME_INCLUDE so that game.h does not define the
  25. // short, server-visible gclient_t and edict_t structures,
  26. // because we define the full size ones in this file
  27. #define    GAME_INCLUDE
  28. #include "game.h"
  29.  
  30. // the "gameversion" client command will print this plus compile date
  31. #define    GAMEVERSION    "data1"
  32.  
  33. // protocol bytes that can be directly added to messages
  34. #define    svc_muzzleflash        1
  35. #define    svc_muzzleflash2    2
  36. #define    svc_temp_entity        3
  37. #define    svc_layout            4
  38. #define    svc_inventory        5
  39. #define    svc_stufftext        11
  40.  
  41. //==================================================================
  42.  
  43. // view pitching times
  44. #define DAMAGE_TIME        0.5
  45. #define    FALL_TIME        0.3
  46.  
  47.  
  48. // edict->spawnflags
  49. // these are set with checkboxes on each entity in the map editor
  50. #define    SPAWNFLAG_NOT_EASY            0x00000100
  51. #define    SPAWNFLAG_NOT_MEDIUM        0x00000200
  52. #define    SPAWNFLAG_NOT_HARD            0x00000400
  53. #define    SPAWNFLAG_NOT_DEATHMATCH    0x00000800
  54. #define    SPAWNFLAG_NOT_COOP            0x00001000
  55.  
  56. // edict->flags
  57. #define    FL_FLY                    0x00000001
  58. #define    FL_SWIM                    0x00000002    // implied immunity to drowining
  59. #define FL_IMMUNE_LASER            0x00000004
  60. #define    FL_INWATER                0x00000008
  61. #define    FL_GODMODE                0x00000010
  62. #define    FL_NOTARGET                0x00000020
  63. #define FL_IMMUNE_SLIME            0x00000040
  64. #define FL_IMMUNE_LAVA            0x00000080
  65. #define    FL_PARTIALGROUND        0x00000100    // not all corners are valid
  66. #define    FL_WATERJUMP            0x00000200    // player jumping out of water
  67. #define    FL_TEAMSLAVE            0x00000400    // not the first on the team
  68. #define FL_NO_KNOCKBACK            0x00000800
  69. #define FL_POWER_ARMOR            0x00001000    // power armor (if any) is active
  70. #define FL_RESPAWN                0x80000000    // used for item respawning
  71.  
  72.  
  73. #define    FRAMETIME        0.1
  74.  
  75. // memory tags to allow dynamic memory to be cleaned up
  76. #define    TAG_GAME    765        // clear when unloading the dll
  77. #define    TAG_LEVEL    766        // clear when loading a new level
  78.  
  79.  
  80. #define MELEE_DISTANCE    80
  81.  
  82. #define BODY_QUEUE_SIZE        8
  83.  
  84. typedef enum
  85. {
  86.     DAMAGE_NO,
  87.     DAMAGE_YES,            // will take damage if hit
  88.     DAMAGE_AIM            // auto targeting recognizes this
  89. } damage_t;
  90.  
  91. typedef enum 
  92. {
  93.     WEAPON_READY, 
  94.     WEAPON_ACTIVATING,
  95.     WEAPON_DROPPING,
  96.     WEAPON_FIRING
  97. } weaponstate_t;
  98.  
  99. typedef enum
  100. {
  101.     AMMO_BULLETS,
  102.     AMMO_SHELLS,
  103.     AMMO_ROCKETS,
  104.     AMMO_GRENADES,
  105.     AMMO_CELLS,
  106.     AMMO_SLUGS
  107. } ammo_t;
  108.  
  109.  
  110. //deadflag
  111. #define DEAD_NO                    0
  112. #define DEAD_DYING                1
  113. #define DEAD_DEAD                2
  114. #define DEAD_RESPAWNABLE        3
  115.  
  116. //range
  117. #define RANGE_MELEE                0
  118. #define RANGE_NEAR                1
  119. #define RANGE_MID                2
  120. #define RANGE_FAR                3
  121.  
  122. //gib types
  123. #define GIB_ORGANIC                0
  124. #define GIB_METALLIC            1
  125.  
  126. //monster ai flags
  127. #define AI_STAND_GROUND            0x00000001
  128. #define AI_TEMP_STAND_GROUND    0x00000002
  129. #define AI_SOUND_TARGET            0x00000004
  130. #define AI_LOST_SIGHT            0x00000008
  131. #define AI_PURSUIT_LAST_SEEN    0x00000010
  132. #define AI_PURSUE_NEXT            0x00000020
  133. #define AI_PURSUE_TEMP            0x00000040
  134. #define AI_HOLD_FRAME            0x00000080
  135. #define AI_GOOD_GUY                0x00000100
  136. #define AI_BRUTAL                0x00000200
  137. #define AI_NOSTEP                0x00000400
  138. #define AI_DUCKED                0x00000800
  139. #define AI_COMBAT_POINT            0x00001000
  140. #define AI_MEDIC                0x00002000
  141. #define AI_RESURRECTING            0x00004000
  142. #define AI_NPC                    0x00008000    // FIXME: use AI_GOOD_GUY instead?
  143.  
  144. //monster attack state
  145. #define AS_STRAIGHT                1
  146. #define AS_SLIDING                2
  147. #define    AS_MELEE                3
  148. #define    AS_MISSILE                4
  149.  
  150. // armor types
  151. #define ARMOR_NONE                0
  152. #define ARMOR_JACKET            1
  153. #define ARMOR_COMBAT            2
  154. #define ARMOR_BODY                3
  155. #define ARMOR_SHARD                4
  156.  
  157. // power armor types
  158. #define POWER_ARMOR_NONE        0
  159. #define POWER_ARMOR_SCREEN        1
  160. #define POWER_ARMOR_SHIELD        2
  161.  
  162. // handedness values
  163. #define RIGHT_HANDED            0
  164. #define LEFT_HANDED                1
  165. #define CENTER_HANDED            2
  166.  
  167.  
  168. // game.serverflags values
  169. #define SFL_CROSS_TRIGGER_1        0x00000001
  170. #define SFL_CROSS_TRIGGER_2        0x00000002
  171. #define SFL_CROSS_TRIGGER_3        0x00000004
  172. #define SFL_CROSS_TRIGGER_4        0x00000008
  173. #define SFL_CROSS_TRIGGER_5        0x00000010
  174. #define SFL_CROSS_TRIGGER_6        0x00000020
  175. #define SFL_CROSS_TRIGGER_7        0x00000040
  176. #define SFL_CROSS_TRIGGER_8        0x00000080
  177. #define SFL_CROSS_TRIGGER_MASK    0x000000ff
  178.  
  179.  
  180. // noise types for PlayerNoise
  181. #define PNOISE_SELF                0
  182. #define PNOISE_WEAPON            1
  183. #define PNOISE_IMPACT            2
  184.  
  185.  
  186. // edict->movetype values
  187. typedef enum
  188. {
  189. MOVETYPE_NONE,            // never moves
  190. MOVETYPE_NOCLIP,        // origin and angles change with no interaction
  191. MOVETYPE_PUSH,            // no clip to world, push on box contact
  192. MOVETYPE_STOP,            // no clip to world, stops on box contact
  193.  
  194. MOVETYPE_WALK,            // gravity
  195. MOVETYPE_STEP,            // gravity, special edge handling
  196. MOVETYPE_FLY,
  197. MOVETYPE_TOSS,            // gravity
  198. MOVETYPE_FLYMISSILE,    // extra size to monsters
  199. MOVETYPE_BOUNCE
  200. } movetype_t;
  201.  
  202.  
  203.  
  204. typedef struct
  205. {
  206.     int        base_count;
  207.     int        max_count;
  208.     float    normal_protection;
  209.     float    energy_protection;
  210.     int        armor;
  211. } gitem_armor_t;
  212.  
  213.  
  214. // gitem_t->flags
  215. #define    IT_WEAPON        1        // use makes active weapon
  216. #define    IT_AMMO            2
  217. #define IT_ARMOR        4
  218. #define IT_STAY_COOP    8
  219. #define IT_KEY            16
  220. #define IT_POWERUP        32
  221.  
  222. // gitem_t->weapmodel for weapons indicates model index
  223. #define WEAP_BLASTER            1 
  224. #define WEAP_SHOTGUN            2 
  225. #define WEAP_SUPERSHOTGUN        3 
  226. #define WEAP_MACHINEGUN            4 
  227. #define WEAP_CHAINGUN            5 
  228. #define WEAP_GRENADES            6 
  229. #define WEAP_GRENADELAUNCHER    7 
  230. #define WEAP_ROCKETLAUNCHER        8 
  231. #define WEAP_HYPERBLASTER        9 
  232. #define WEAP_RAILGUN            10
  233. #define WEAP_BFG                11
  234.  
  235. typedef struct gitem_s
  236. {
  237.     char        *classname;    // spawning name
  238.     qboolean    (*pickup)(struct edict_s *ent, struct edict_s *other);
  239.     void        (*use)(struct edict_s *ent, struct gitem_s *item);
  240.     void        (*drop)(struct edict_s *ent, struct gitem_s *item);
  241.     void        (*weaponthink)(struct edict_s *ent);
  242.     char        *pickup_sound;
  243.     char        *world_model;
  244.     int            world_model_flags;
  245.     char        *view_model;
  246.  
  247.     // client side info
  248.     char        *icon;
  249.     char        *pickup_name;    // for printing on pickup
  250.     int            count_width;        // number of digits to display by icon
  251.  
  252.     int            quantity;        // for ammo how much, for weapons how much is used per shot
  253.     char        *ammo;            // for weapons
  254.     int            flags;            // IT_* flags
  255.  
  256.     int            weapmodel;        // weapon model index (for weapons)
  257.  
  258.     void        *info;
  259.     int            tag;
  260.  
  261.     char        *precaches;        // string of all models, sounds, and images this item will use
  262. } gitem_t;
  263.  
  264.  
  265.  
  266. //
  267. // this structure is left intact through an entire game
  268. // it should be initialized at dll load time, and read/written to
  269. // the server.ssv file for savegames
  270. //
  271. typedef struct
  272. {
  273.     char        helpmessage1[512];
  274.     char        helpmessage2[512];
  275.     int            helpchanged;    // flash F1 icon if non 0, play sound
  276.                                 // and increment only if 1, 2, or 3
  277.  
  278.     gclient_t    *clients;        // [maxclients]
  279.  
  280.     // can't store spawnpoint in level, because
  281.     // it would get overwritten by the savegame restore
  282.     char        spawnpoint[512];    // needed for coop respawns
  283.  
  284.     // store latched cvars here that we want to get at often
  285.     int            maxclients;
  286.     int            maxentities;
  287.  
  288.     // cross level triggers
  289.     int            serverflags;
  290.  
  291.     // items
  292.     int            num_items;
  293.  
  294.     qboolean    autosaved;
  295. } game_locals_t;
  296.  
  297.  
  298. //
  299. // this structure is cleared as each map is entered
  300. // it is read/written to the level.sav file for savegames
  301. //
  302. typedef struct
  303. {
  304.     int            framenum;
  305.     float        time;
  306.  
  307.     char        level_name[MAX_QPATH];    // the descriptive name (Outer Base, etc)
  308.     char        mapname[MAX_QPATH];        // the server name (base1, etc)
  309.     char        nextmap[MAX_QPATH];        // go here when fraglimit is hit
  310.  
  311.     // intermission state
  312.     float        intermissiontime;        // time the intermission was started
  313.     char        *changemap;
  314.     int            exitintermission;
  315.     vec3_t        intermission_origin;
  316.     vec3_t        intermission_angle;
  317.  
  318.     edict_t        *sight_client;    // changed once each frame for coop games
  319.  
  320.     edict_t        *sight_entity;
  321.     int            sight_entity_framenum;
  322.     edict_t        *sound_entity;
  323.     int            sound_entity_framenum;
  324.     edict_t        *sound2_entity;
  325.     int            sound2_entity_framenum;
  326.  
  327.     int            pic_health;
  328.  
  329.     int            total_secrets;
  330.     int            found_secrets;
  331.  
  332.     int            total_goals;
  333.     int            found_goals;
  334.  
  335.     int            total_monsters;
  336.     int            killed_monsters;
  337.  
  338.     edict_t        *current_entity;    // entity running from G_RunFrame
  339.     int            body_que;            // dead bodies
  340.  
  341.     int            power_cubes;        // ugly necessity for coop
  342. } level_locals_t;
  343.  
  344.  
  345. // spawn_temp_t is only used to hold entity field values that
  346. // can be set from the editor, but aren't actualy present
  347. // in edict_t during gameplay
  348. typedef struct
  349. {
  350.     // world vars
  351.     char        *sky;
  352.     float        skyrotate;
  353.     vec3_t        skyaxis;
  354.     char        *nextmap;
  355.  
  356.     int            lip;
  357.     int            distance;
  358.     int            height;
  359.     char        *noise;
  360.     float        pausetime;
  361.     char        *item;
  362.     char        *gravity;
  363.  
  364.     float        minyaw;
  365.     float        maxyaw;
  366.     float        minpitch;
  367.     float        maxpitch;
  368. } spawn_temp_t;
  369.  
  370.  
  371. typedef struct
  372. {
  373.     // fixed data
  374.     vec3_t        start_origin;
  375.     vec3_t        start_angles;
  376.     vec3_t        end_origin;
  377.     vec3_t        end_angles;
  378.  
  379.     int            sound_start;
  380.     int            sound_middle;
  381.     int            sound_end;
  382.  
  383.     float        accel;
  384.     float        speed;
  385.     float        decel;
  386.     float        distance;
  387.  
  388.     float        wait;
  389.  
  390.     // state data
  391.     int            state;
  392.     vec3_t        dir;
  393.     float        current_speed;
  394.     float        move_speed;
  395.     float        next_speed;
  396.     float        remaining_distance;
  397.     float        decel_distance;
  398.     void        (*endfunc)(edict_t *);
  399. } moveinfo_t;
  400.  
  401.  
  402. typedef struct
  403. {
  404.     void    (*aifunc)(edict_t *self, float dist);
  405.     float    dist;
  406.     void    (*thinkfunc)(edict_t *self);
  407. } mframe_t;
  408.  
  409. typedef struct
  410. {
  411.     int            firstframe;
  412.     int            lastframe;
  413.     mframe_t    *frame;
  414.     void        (*endfunc)(edict_t *self);
  415. } mmove_t;
  416.  
  417. typedef struct
  418. {
  419.     mmove_t        *currentmove;
  420.     int            aiflags;
  421.     int            nextframe;
  422.     float        scale;
  423.  
  424.     void        (*stand)(edict_t *self);
  425.     void        (*idle)(edict_t *self);
  426.     void        (*search)(edict_t *self);
  427.     void        (*walk)(edict_t *self);
  428.     void        (*run)(edict_t *self);
  429.     void        (*dodge)(edict_t *self, edict_t *other, float eta);
  430.     void        (*attack)(edict_t *self);
  431.     void        (*melee)(edict_t *self);
  432.     void        (*sight)(edict_t *self, edict_t *other);
  433.     qboolean    (*checkattack)(edict_t *self);
  434.  
  435.     float        pausetime;
  436.     float        attack_finished;
  437.  
  438.     vec3_t        saved_goal;
  439.     float        search_time;
  440.     float        trail_time;
  441.     vec3_t        last_sighting;
  442.     int            attack_state;
  443.     int            lefty;
  444.     float        idle_time;
  445.     int            linkcount;
  446.  
  447.     int            power_armor_type;
  448.     int            power_armor_power;
  449. } monsterinfo_t;
  450.  
  451.  
  452.  
  453. extern    game_locals_t    game;
  454. extern    level_locals_t    level;
  455. extern    game_import_t    gi;
  456. extern    game_export_t    globals;
  457. extern    spawn_temp_t    st;
  458.  
  459. extern    int    sm_meat_index;
  460. extern    int    snd_fry;
  461.  
  462. extern    int    jacket_armor_index;
  463. extern    int    combat_armor_index;
  464. extern    int    body_armor_index;
  465.  
  466.  
  467. // means of death
  468. #define MOD_UNKNOWN            0
  469. #define MOD_BLASTER            1
  470. #define MOD_SHOTGUN            2
  471. #define MOD_SSHOTGUN        3
  472. #define MOD_MACHINEGUN        4
  473. #define MOD_CHAINGUN        5
  474. #define MOD_GRENADE            6
  475. #define MOD_G_SPLASH        7
  476. #define MOD_ROCKET            8
  477. #define MOD_R_SPLASH        9
  478. #define MOD_HYPERBLASTER    10
  479. #define MOD_RAILGUN            11
  480. #define MOD_BFG_LASER        12
  481. #define MOD_BFG_BLAST        13
  482. #define MOD_BFG_EFFECT        14
  483. #define MOD_HANDGRENADE        15
  484. #define MOD_HG_SPLASH        16
  485. #define MOD_WATER            17
  486. #define MOD_SLIME            18
  487. #define MOD_LAVA            19
  488. #define MOD_CRUSH            20
  489. #define MOD_TELEFRAG        21
  490. #define MOD_FALLING            22
  491. #define MOD_SUICIDE            23
  492. #define MOD_HELD_GRENADE    24
  493. #define MOD_EXPLOSIVE        25
  494. #define MOD_BARREL            26
  495. #define MOD_BOMB            27
  496. #define MOD_EXIT            28
  497. #define MOD_SPLASH            29
  498. #define MOD_TARGET_LASER    30
  499. #define MOD_TRIGGER_HURT    31
  500. #define MOD_HIT                32
  501. #define MOD_TARGET_BLASTER    33
  502. #define MOD_FRIENDLY_FIRE    0x8000000
  503.  
  504. extern    int    meansOfDeath;
  505.  
  506.  
  507. extern    edict_t            *g_edicts;
  508.  
  509. #define    FOFS(x) (int)&(((edict_t *)0)->x)
  510. #define    STOFS(x) (int)&(((spawn_temp_t *)0)->x)
  511. #define    LLOFS(x) (int)&(((level_locals_t *)0)->x)
  512. #define    CLOFS(x) (int)&(((gclient_t *)0)->x)
  513.  
  514. #define random()    ((rand () & 0x7fff) / ((float)0x7fff))
  515. #define crandom()    (2.0 * (random() - 0.5))
  516.  
  517. extern    cvar_t    *maxentities;
  518. extern    cvar_t    *deathmatch;
  519. extern    cvar_t    *coop;
  520. extern    cvar_t    *dmflags;
  521. extern    cvar_t    *skill;
  522. extern    cvar_t    *fraglimit;
  523. extern    cvar_t    *timelimit;
  524. extern    cvar_t    *password;
  525. extern    cvar_t    *spectator_password;
  526. extern    cvar_t    *needpass;
  527. extern    cvar_t    *g_select_empty;
  528. extern    cvar_t    *dedicated;
  529.  
  530. extern    cvar_t    *filterban;
  531.  
  532. extern    cvar_t    *sv_gravity;
  533. extern    cvar_t    *sv_maxvelocity;
  534.  
  535. extern    cvar_t    *gun_x, *gun_y, *gun_z;
  536. extern    cvar_t    *sv_rollspeed;
  537. extern    cvar_t    *sv_rollangle;
  538.  
  539. extern    cvar_t    *run_pitch;
  540. extern    cvar_t    *run_roll;
  541. extern    cvar_t    *bob_up;
  542. extern    cvar_t    *bob_pitch;
  543. extern    cvar_t    *bob_roll;
  544.  
  545. extern    cvar_t    *sv_cheats;
  546. extern    cvar_t    *maxclients;
  547. extern    cvar_t    *maxspectators;
  548.  
  549. extern    cvar_t    *flood_msgs;
  550. extern    cvar_t    *flood_persecond;
  551. extern    cvar_t    *flood_waitdelay;
  552.  
  553. extern    cvar_t    *sv_maplist;
  554.  
  555. #define world    (&g_edicts[0])
  556.  
  557. // item spawnflags
  558. #define ITEM_TRIGGER_SPAWN        0x00000001
  559. #define ITEM_NO_TOUCH            0x00000002
  560. // 6 bits reserved for editor flags
  561. // 8 bits used as power cube id bits for coop games
  562. #define DROPPED_ITEM            0x00010000
  563. #define    DROPPED_PLAYER_ITEM        0x00020000
  564. #define ITEM_TARGETS_USED        0x00040000
  565.  
  566. //
  567. // fields are needed for spawning from the entity string
  568. // and saving / loading games
  569. //
  570. #define FFL_SPAWNTEMP        1
  571. #define FFL_NOSPAWN            2
  572.  
  573. typedef enum {
  574.     F_INT, 
  575.     F_FLOAT,
  576.     F_LSTRING,            // string on disk, pointer in memory, TAG_LEVEL
  577.     F_GSTRING,            // string on disk, pointer in memory, TAG_GAME
  578.     F_VECTOR,
  579.     F_ANGLEHACK,
  580.     F_EDICT,            // index on disk, pointer in memory
  581.     F_ITEM,                // index on disk, pointer in memory
  582.     F_CLIENT,            // index on disk, pointer in memory
  583.     F_FUNCTION,
  584.     F_MMOVE,
  585.     F_IGNORE
  586. } fieldtype_t;
  587.  
  588. typedef struct
  589. {
  590.     char    *name;
  591.     int        ofs;
  592.     fieldtype_t    type;
  593.     int        flags;
  594. } field_t;
  595.  
  596.  
  597. extern    field_t fields[];
  598. extern    gitem_t    itemlist[];
  599.  
  600.  
  601. //
  602. // g_cmds.c
  603. //
  604. void Cmd_Help_f (edict_t *ent);
  605. void Cmd_Score_f (edict_t *ent);
  606.  
  607. //
  608. // g_items.c
  609. //
  610. void PrecacheItem (gitem_t *it);
  611. void InitItems (void);
  612. void SetItemNames (void);
  613. gitem_t    *FindItem (char *pickup_name);
  614. gitem_t    *FindItemByClassname (char *classname);
  615. #define    ITEM_INDEX(x) ((x)-itemlist)
  616. edict_t *Drop_Item (edict_t *ent, gitem_t *item);
  617. void SetRespawn (edict_t *ent, float delay);
  618. void ChangeWeapon (edict_t *ent);
  619. void SpawnItem (edict_t *ent, gitem_t *item);
  620. void Think_Weapon (edict_t *ent);
  621. int ArmorIndex (edict_t *ent);
  622. int PowerArmorType (edict_t *ent);
  623. gitem_t    *GetItemByIndex (int index);
  624. qboolean Add_Ammo (edict_t *ent, gitem_t *item, int count);
  625. void Touch_Item (edict_t *ent, edict_t *other, cplane_t *plane, csurface_t *surf);
  626.  
  627. //
  628. // g_utils.c
  629. //
  630. qboolean    KillBox (edict_t *ent);
  631. void    G_ProjectSource (vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result);
  632. edict_t *G_Find (edict_t *from, int fieldofs, char *match);
  633. edict_t *findradius (edict_t *from, vec3_t org, float rad);
  634. edict_t *G_PickTarget (char *targetname);
  635. void    G_UseTargets (edict_t *ent, edict_t *activator);
  636. void    G_SetMovedir (vec3_t angles, vec3_t movedir);
  637.  
  638. void    G_InitEdict (edict_t *e);
  639. edict_t    *G_Spawn (void);
  640. void    G_FreeEdict (edict_t *e);
  641.  
  642. void    G_TouchTriggers (edict_t *ent);
  643. void    G_TouchSolids (edict_t *ent);
  644.  
  645. char    *G_CopyString (char *in);
  646.  
  647. float    *tv (float x, float y, float z);
  648. char    *vtos (vec3_t v);
  649.  
  650. float vectoyaw (vec3_t vec);
  651. void vectoangles (vec3_t vec, vec3_t angles);
  652.  
  653. //
  654. // g_combat.c
  655. //
  656. qboolean OnSameTeam (edict_t *ent1, edict_t *ent2);
  657. qboolean CanDamage (edict_t *targ, edict_t *inflictor);
  658. void T_Damage (edict_t *targ, edict_t *inflictor, edict_t *attacker, vec3_t dir, vec3_t point, vec3_t normal, int damage, int knockback, int dflags, int mod);
  659. void T_RadiusDamage (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod);
  660.  
  661. // damage flags
  662. #define DAMAGE_RADIUS            0x00000001    // damage was indirect
  663. #define DAMAGE_NO_ARMOR            0x00000002    // armour does not protect from this damage
  664. #define DAMAGE_ENERGY            0x00000004    // damage is from an energy based weapon
  665. #define DAMAGE_NO_KNOCKBACK        0x00000008    // do not affect velocity, just view angles
  666. #define DAMAGE_BULLET            0x00000010  // damage is from a bullet (used for ricochets)
  667. #define DAMAGE_NO_PROTECTION    0x00000020  // armor, shields, invulnerability, and godmode have no effect
  668.  
  669. #define DEFAULT_BULLET_HSPREAD    300
  670. #define DEFAULT_BULLET_VSPREAD    500
  671. #define DEFAULT_SHOTGUN_HSPREAD    1000
  672. #define DEFAULT_SHOTGUN_VSPREAD    500
  673. #define DEFAULT_DEATHMATCH_SHOTGUN_COUNT    12
  674. #define DEFAULT_SHOTGUN_COUNT    12
  675. #define DEFAULT_SSHOTGUN_COUNT    20
  676.  
  677. //
  678. // g_monster.c
  679. //
  680. void monster_fire_bullet (edict_t *self, vec3_t start, vec3_t dir, int damage, int kick, int hspread, int vspread, int flashtype);
  681. void monster_fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int flashtype);
  682. void monster_fire_blaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect);
  683. void monster_fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int flashtype);
  684. void monster_fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype);
  685. void monster_fire_railgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int flashtype);
  686. void monster_fire_bfg (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int kick, float damage_radius, int flashtype);
  687. void monster_fire_floater (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype);
  688. void monster_fire_sidewinder (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype);
  689.  
  690. void M_droptofloor (edict_t *ent);
  691. void monster_think (edict_t *self);
  692. void walkmonster_start (edict_t *self);
  693. void swimmonster_start (edict_t *self);
  694. void flymonster_start (edict_t *self);
  695. void AttackFinished (edict_t *self, float time);
  696. void monster_death_use (edict_t *self);
  697. void M_CatagorizePosition (edict_t *ent);
  698. qboolean M_CheckAttack (edict_t *self);
  699. void M_FlyCheck (edict_t *self);
  700. void M_CheckGround (edict_t *ent);
  701. void M_SetEffects (edict_t *ent);
  702.  
  703. //
  704. // g_misc.c
  705. //
  706. void ThrowHead (edict_t *self, char *gibname, int damage, int type, int effects);
  707. void ThrowClientHead (edict_t *self, int damage);
  708. void ThrowGib (edict_t *self, char *gibname, int damage, int type, int effects);
  709. void ThrowBloodStain (edict_t *self, char *gibname);
  710. void BecomeExplosion1 (edict_t *self);
  711.  
  712. //
  713. // g_ai.c
  714. //
  715. void AI_SetSightClient (void);
  716.  
  717. void ai_stand (edict_t *self, float dist);
  718. void ai_move (edict_t *self, float dist);
  719. void ai_walk (edict_t *self, float dist);
  720. void ai_turn (edict_t *self, float dist);
  721. void ai_still (edict_t *self, float dist);
  722. void ai_run (edict_t *self, float dist);
  723. void ai_charge (edict_t *self, float dist);
  724. int range (edict_t *self, edict_t *other);
  725.  
  726. void FoundTarget (edict_t *self);
  727. qboolean infront (edict_t *self, edict_t *other);
  728. qboolean visible (edict_t *self, edict_t *other);
  729. qboolean FacingIdeal(edict_t *self);
  730.  
  731. //
  732. // g_weapon.c
  733. //
  734. void ThrowDebris (edict_t *self, char *modelname, float speed, vec3_t origin);
  735. qboolean fire_hit (edict_t *self, vec3_t aim, int damage, int kick);
  736. void fire_bullet (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int mod);
  737. void fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod);
  738. void fire_blaster (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect, qboolean hyper);
  739. void fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius);
  740. void fire_grenade2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius, qboolean held);
  741. void fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
  742. void fire_rail (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick);
  743. void fire_bfg (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius);
  744. void fire_stinger (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
  745. void fire_stinger2 (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
  746. void fire_sidewinder (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
  747. void fire_sidewinder2 (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
  748. void fire_plasma (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick);
  749. void fire_floater (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage, float timer);
  750. void fire_blaster_beam (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick);
  751. void fire_floater (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage, float timer);
  752. void fire_floater_alien (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage, float timer);
  753.  
  754.  
  755. //
  756. // g_ptrail.c
  757. //
  758. void PlayerTrail_Init (void);
  759. void PlayerTrail_Add (vec3_t spot);
  760. void PlayerTrail_New (vec3_t spot);
  761. edict_t *PlayerTrail_PickFirst (edict_t *self);
  762. edict_t *PlayerTrail_PickNext (edict_t *self);
  763. edict_t    *PlayerTrail_LastSpot (void);
  764.  
  765. //
  766. // g_client.c
  767. //
  768. void respawn (edict_t *ent);
  769. void BeginIntermission (edict_t *targ);
  770. void PutClientInServer (edict_t *ent);
  771. void InitClientPersistant (gclient_t *client);
  772. void InitClientResp (gclient_t *client);
  773. void InitBodyQue (void);
  774. void ClientBeginServerFrame (edict_t *ent);
  775.  
  776. //
  777. // g_player.c
  778. //
  779. void player_pain (edict_t *self, edict_t *other, float kick, int damage);
  780. void player_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
  781.  
  782. //
  783. // g_svcmds.c
  784. //
  785. void    ServerCommand (void);
  786. qboolean SV_FilterPacket (char *from);
  787.  
  788. //
  789. // p_view.c
  790. //
  791. void ClientEndServerFrame (edict_t *ent);
  792.  
  793. //
  794. // p_hud.c
  795. //
  796. void MoveClientToIntermission (edict_t *client);
  797. void G_SetStats (edict_t *ent);
  798. void G_SetSpectatorStats (edict_t *ent);
  799. void G_CheckChaseStats (edict_t *ent);
  800. void ValidateSelectedItem (edict_t *ent);
  801. void DeathmatchScoreboardMessage (edict_t *client, edict_t *killer);
  802.  
  803. //
  804. // g_pweapon.c
  805. //
  806. void PlayerNoise(edict_t *who, vec3_t where, int type);
  807.  
  808. //
  809. // m_move.c
  810. //
  811. qboolean M_CheckBottom (edict_t *ent);
  812. qboolean M_walkmove (edict_t *ent, float yaw, float dist);
  813. void M_MoveToGoal (edict_t *ent, float dist);
  814. void M_ChangeYaw (edict_t *ent);
  815.  
  816. //
  817. // g_phys.c
  818. //
  819. void G_RunEntity (edict_t *ent);
  820.  
  821. //
  822. // g_main.c
  823. //
  824. void SaveClientData (void);
  825. void FetchClientEntData (edict_t *ent);
  826.  
  827. //
  828. // g_chase.c
  829. //
  830. void UpdateChaseCam(edict_t *ent);
  831. void ChaseNext(edict_t *ent);
  832. void ChasePrev(edict_t *ent);
  833. void GetChaseTarget(edict_t *ent);
  834.  
  835. //============================================================================
  836.  
  837. // client_t->anim_priority
  838. #define    ANIM_BASIC        0        // stand / run
  839. #define    ANIM_WAVE        1
  840. #define    ANIM_JUMP        2
  841. #define    ANIM_PAIN        3
  842. #define    ANIM_ATTACK        4
  843. #define    ANIM_DEATH        5
  844. #define    ANIM_REVERSE    6
  845.  
  846.  
  847. // client data that stays across multiple level loads
  848. typedef struct
  849. {
  850.     char        userinfo[MAX_INFO_STRING];
  851.     char        netname[16];
  852.     int            hand;
  853.  
  854.     qboolean    connected;            // a loadgame will leave valid entities that
  855.                                     // just don't have a connection yet
  856.  
  857.     // values saved and restored from edicts when changing levels
  858.     int            health;
  859.     int            max_health;
  860.     int            savedFlags;
  861.  
  862.     int            selected_item;
  863.     int            inventory[MAX_ITEMS];
  864.  
  865.     // ammo capacities
  866.     int            max_bullets;
  867.     int            max_shells;
  868.     int            max_rockets;
  869.     int            max_grenades;
  870.     int            max_cells;
  871.     int            max_slugs;
  872.  
  873.     gitem_t        *weapon;
  874.     gitem_t        *lastweapon;
  875.  
  876.     int            power_cubes;    // used for tracking the cubes in coop games
  877.     int            score;            // for calculating total unit score in coop games
  878.  
  879.     int            game_helpchanged;
  880.     int            helpchanged;
  881.  
  882.     qboolean    spectator;            // client is a spectator
  883. } client_persistant_t;
  884.  
  885. // client data that stays across deathmatch respawns
  886. typedef struct
  887. {
  888.     client_persistant_t    coop_respawn;    // what to set client->pers to on a respawn
  889.     int            enterframe;            // level.framenum the client entered the game
  890.     int            score;                // frags, etc
  891.     vec3_t        cmd_angles;            // angles sent over in the last command
  892.  
  893.     qboolean    spectator;            // client is a spectator
  894. } client_respawn_t;
  895.  
  896. // this structure is cleared on each PutClientInServer(),
  897. // except for 'client->pers'
  898. struct gclient_s
  899. {
  900.     // known to server
  901.     player_state_t    ps;                // communicated by server to clients
  902.     int                ping;
  903.  
  904.     // private to game
  905.     client_persistant_t    pers;
  906.     client_respawn_t    resp;
  907.     pmove_state_t        old_pmove;    // for detecting out-of-pmove changes
  908.  
  909.     qboolean    showscores;            // set layout stat
  910.     qboolean    showinventory;        // set layout stat
  911.     qboolean    showhelp;
  912.     qboolean    showhelpicon;
  913.  
  914.     int            ammo_index;
  915.  
  916.     int            buttons;
  917.     int            oldbuttons;
  918.     int            latched_buttons;
  919.  
  920.     qboolean    weapon_thunk;
  921.  
  922.     gitem_t        *newweapon;
  923.  
  924.     // sum up damage over an entire frame, so
  925.     // shotgun blasts give a single big kick
  926.     int            damage_armor;        // damage absorbed by armor
  927.     int            damage_parmor;        // damage absorbed by power armor
  928.     int            damage_blood;        // damage taken out of health
  929.     int            damage_knockback;    // impact damage
  930.     vec3_t        damage_from;        // origin for vector calculation
  931.  
  932.     float        killer_yaw;            // when dead, look at killer
  933.  
  934.     weaponstate_t    weaponstate;
  935.     vec3_t        kick_angles;    // weapon kicks
  936.     vec3_t        kick_origin;
  937.     float        v_dmg_roll, v_dmg_pitch, v_dmg_time;    // damage kicks
  938.     float        fall_time, fall_value;        // for view drop on fall
  939.     float        damage_alpha;
  940.     float        bonus_alpha;
  941.     vec3_t        damage_blend;
  942.     vec3_t        v_angle;            // aiming direction
  943.     float        bobtime;            // so off-ground doesn't change it
  944.     vec3_t        oldviewangles;
  945.     vec3_t        oldvelocity;
  946.  
  947.     float        next_drown_time;
  948.     int            old_waterlevel;
  949.     int            breather_sound;
  950.  
  951.     int            machinegun_shots;    // for weapon raising
  952.  
  953.     // animation vars
  954.     int            anim_end;
  955.     int            anim_priority;
  956.     qboolean    anim_duck;
  957.     qboolean    anim_run;
  958.  
  959.     // powerup timers
  960.     float        quad_framenum;
  961.     float        invincible_framenum;
  962.     float        breather_framenum;
  963.     float        enviro_framenum;
  964.  
  965.     qboolean    grenade_blew_up;
  966.     float        grenade_time;
  967.     int            silencer_shots;
  968.     int            weapon_sound;
  969.  
  970.     float        pickup_msg_time;
  971.  
  972.     float        flood_locktill;        // locked from talking
  973.     float        flood_when[10];        // when messages were said
  974.     int            flood_whenhead;        // head pointer for when said
  975.  
  976.     float        respawn_time;        // can respawn when time > this
  977.  
  978.     edict_t        *chase_target;        // player we are chasing
  979.     qboolean    update_chase;        // need to update chase info?
  980. };
  981.  
  982.  
  983. struct edict_s
  984. {
  985.     entity_state_t    s;
  986.     struct gclient_s    *client;    // NULL if not a player
  987.                                     // the server expects the first part
  988.                                     // of gclient_s to be a player_state_t
  989.                                     // but the rest of it is opaque
  990.  
  991.     qboolean    inuse;
  992.     int            linkcount;
  993.  
  994.     // FIXME: move these fields to a server private sv_entity_t
  995.     link_t        area;                // linked to a division node or leaf
  996.     
  997.     int            num_clusters;        // if -1, use headnode instead
  998.     int            clusternums[MAX_ENT_CLUSTERS];
  999.     int            headnode;            // unused if num_clusters != -1
  1000.     int            areanum, areanum2;
  1001.  
  1002.     //================================
  1003.  
  1004.     int            svflags;
  1005.     vec3_t        mins, maxs;
  1006.     vec3_t        absmin, absmax, size;
  1007.     solid_t        solid;
  1008.     int            clipmask;
  1009.     edict_t        *owner;
  1010.  
  1011.  
  1012.     // DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER
  1013.     // EXPECTS THE FIELDS IN THAT ORDER!
  1014.  
  1015.     //================================
  1016.     int            movetype;
  1017.     int            flags;
  1018.  
  1019.     char        *model;
  1020.     float        freetime;            // sv.time when the object was freed
  1021.     
  1022.     //
  1023.     // only used locally in game, not by server
  1024.     //
  1025.     char        *message;
  1026.     char        *classname;
  1027.     int            spawnflags;
  1028.  
  1029.     float        timestamp;
  1030.  
  1031.     float        angle;            // set in qe3, -1 = up, -2 = down
  1032.     char        *target;
  1033.     char        *targetname;
  1034.     char        *killtarget;
  1035.     char        *team;
  1036.     char        *pathtarget;
  1037.     char        *deathtarget;
  1038.     char        *combattarget;
  1039.     edict_t        *target_ent;
  1040.  
  1041.     float        speed, accel, decel;
  1042.     vec3_t        movedir;
  1043.     vec3_t        pos1, pos2;
  1044.  
  1045.     vec3_t        velocity;
  1046.     vec3_t        avelocity;
  1047.     int            mass;
  1048.     float        air_finished;
  1049.     float        gravity;        // per entity gravity multiplier (1.0 is normal)
  1050.                                 // use for lowgrav artifact, flares
  1051.  
  1052.     edict_t        *goalentity;
  1053.     edict_t        *movetarget;
  1054.     float        yaw_speed;
  1055.     float        ideal_yaw;
  1056.  
  1057.     float        nextthink;
  1058.     void        (*prethink) (edict_t *ent);
  1059.     void        (*think)(edict_t *self);
  1060.     void        (*blocked)(edict_t *self, edict_t *other);    //move to moveinfo?
  1061.     void        (*touch)(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf);
  1062.     void        (*use)(edict_t *self, edict_t *other, edict_t *activator);
  1063.     void        (*pain)(edict_t *self, edict_t *other, float kick, int damage);
  1064.     void        (*die)(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
  1065.  
  1066.     float        touch_debounce_time;        // are all these legit?  do we need more/less of them?
  1067.     float        pain_debounce_time;
  1068.     float        damage_debounce_time;
  1069.     float        fly_sound_debounce_time;    //move to clientinfo
  1070.     float        last_move_time;
  1071.  
  1072.     int            health;
  1073.     int            max_health;
  1074.     int            gib_health;
  1075.     int            deadflag;
  1076.     qboolean    show_hostile;
  1077.  
  1078.     float        powerarmor_time;
  1079.  
  1080.     char        *map;            // target_changelevel
  1081.  
  1082.     int            viewheight;        // height above origin where eyesight is determined
  1083.     int            takedamage;
  1084.     int            dmg;
  1085.     int            radius_dmg;
  1086.     float        dmg_radius;
  1087.     int            sounds;            //make this a spawntemp var?
  1088.     int            count;
  1089.  
  1090.     edict_t        *chain;
  1091.     edict_t        *enemy;
  1092.     edict_t        *oldenemy;
  1093.     edict_t        *activator;
  1094.     edict_t        *groundentity;
  1095.     int            groundentity_linkcount;
  1096.     edict_t        *teamchain;
  1097.     edict_t        *teammaster;
  1098.  
  1099.     edict_t        *mynoise;        // can go in client only
  1100.     edict_t        *mynoise2;
  1101.  
  1102.     int            noise_index;
  1103.     int            noise_index2;
  1104.     float        volume;
  1105.     float        attenuation;
  1106.  
  1107.     // timing variables
  1108.     float        wait;
  1109.     float        delay;            // before firing targets
  1110.     float        random;
  1111.  
  1112.     float        teleport_time;
  1113.  
  1114.     int            watertype;
  1115.     int            waterlevel;
  1116.  
  1117.     vec3_t        move_origin;
  1118.     vec3_t        move_angles;
  1119.  
  1120.     // move this to clientinfo?
  1121.     int            light_level;
  1122.  
  1123.     int            style;            // also used as areaportal number
  1124.  
  1125.     gitem_t        *item;            // for bonus items
  1126.  
  1127.     // common data blocks
  1128.     moveinfo_t        moveinfo;
  1129.     monsterinfo_t    monsterinfo;
  1130.  
  1131.     edict_t *flashlight;
  1132. };
  1133.  
  1134. void FL_think (edict_t *self);
  1135. void FL_make(edict_t *self);
  1136.  
  1137.  
  1138.